
----------创建部门经理表
create table managerinfo(
managerid number(11) constraint managerinfo_managerid_pk primary key,
managername varchar2(50)
);

-- 1、创建一个该表主键使用的序列对象
create sequence seq_managerinfo_managerid
      nomaxvalue
      nocycle
      nocache;
      
-- 2、创建一个触发器，在新增时把序列的值赋值给主键字段
create trigger trigger_managerinfo_managerid
      before insert
      on managerinfo
      for each row
      begin
          --- 将序列的值赋值给要出入的数据记录的主键字段
          -- 注意：使用为对象 new或old时，需要使用 :new  :old
          select seq_managerinfo_managerid.nextval into :new.managerid from dual;      
      end; 
      
-- 插入数据
insert into managerinfo(managername) values('李四');

-- 查询结果
select * from managerinfo;
      
-------- 创建部门表
create table depts (
deptid number(11) constraint depts_deptId_pk primary key,
deptname varchar2(20),
managerid  number(20),
constraint depts_managerid_fk foreign key(managerid) references managerinfo(managerid) on delete set null
)

-- 1、创建一个该表主键使用的序列对象
create sequence seq_depts_deptid
      nomaxvalue
      nocycle
      nocache;
      
-- 2、创建一个触发器，在新增时把序列的值赋值给主键字段
create or replace trigger trigger_depts_deptid
      before insert
      on depts
      for each row
      begin
          --- 将序列的值赋值给要出入的数据记录的主键字段
          -- 注意：使用为对象 new或old时，需要使用 :new  :old
          select seq_depts_deptid.nextval into :new.deptid from dual;      
      end; 
      
-- 插入数据
insert into depts(deptname,managerid) values('开发部',1);

-----创建员工表

create table emps (
   empid number(11) constraint emps_empId_pk primary key,
   empname varchar2(50) ,
   deptid number(11) constraint emps_deptId_fk  references depts(deptid) ON DELETE set null  --- 列级约束
   
);

-- 1、创建一个该表主键使用的序列对象
create sequence seq_emps_empid
      nomaxvalue
      nocycle
      nocache;
      
-- 2、创建一个触发器，在新增时把序列的值赋值给主键字段
create or replace trigger trigger_emps_empid
      before insert
      on emps
      for each row
      begin
          --- 将序列的值赋值给要出入的数据记录的主键字段
          -- 注意：使用为对象 new或old时，需要使用 :new  :old
          select seq_emps_empid.nextval into :new.empid from dual;      
      end; 
-- 插入数据
insert into emps(empname,deptid) values('员工1',1);
insert into emps(empname,deptid) values('员工2',1);

--查询数据
select * from emps; 


----一对一关联查询
select d.*,m.* from depts d,managerinfo m where d.managerid=m.managerid and d.deptid = 1
----一对多关联查询
select d.*,e.* from depts d,emps e where d.managerid=e.deptid and d.deptid = 1